home *** CD-ROM | disk | FTP | other *** search
/ Magic Illusions / Magic Illusions (1995)(GTI - Schatztruhe)[!].iso / MSDOS / TOOLS / ANSI / SANSI.BAS < prev    next >
BASIC Source File  |  1994-08-07  |  6KB  |  187 lines

  1. DECLARE SUB MakePat (Zw$, ZwF%, ZwB%)
  2. DECLARE SUB MakeANSI (offen%)
  3. DECLARE FUNCTION InsPat$ (Zahl%)
  4. DECLARE FUNCTION PosOK% (Up%, Max%)
  5. DECLARE SUB MakeSITS (eingabe$, laenge%)
  6. CONST MaxEin = 70
  7. CONST MaxAus = 80
  8. DIM zeile AS STRING * MaxEin
  9. DIM SHARED Result AS STRING * MaxAus
  10. DIM SHARED ResultF(MaxAus + 1), ResultB(MaxAus + 1) AS INTEGER
  11. DIM minpat AS INTEGER
  12. DIM Patlen AS INTEGER
  13. DIM veil AS INTEGER
  14. RANDOMIZE TIMER
  15. CONST maxpat = 10
  16.  
  17. CONST Zeichen = "°±²Û"
  18. CONST Zeichenk = 4
  19. CONST FColor = 16
  20. CONST BColor = 8
  21. CLS
  22. PRINT " SANSI V111.111á"
  23. PRINT " (c) Arndt Grass"
  24. PRINT : PRINT
  25. INPUT "Filename"; datei$
  26. INPUT "Wie soll die ANSI-Ausgabedatei heiáen"; ausdatei$
  27. ausdatei$ = "c:\qb4\" + ausdatei$
  28. datei$ = "c:\qb4\" + datei$
  29. OPEN datei$ FOR INPUT AS #1
  30. veil = FREEFILE
  31. OPEN ausdatei$ FOR OUTPUT AS veil
  32. INPUT #1, identi$
  33. IF LEFT$(identi$, 3) <> "SAS" THEN
  34.         PRINT "Wrong Inputfile, Dude!!!"
  35.         CLOSE
  36.         END
  37. ELSE
  38.         minpat = (VAL(MID$(identi$, 5, 1)) + 1) * 2
  39. END IF
  40. IF MID$(identi$, 6, 1) = ":" THEN
  41.         pat$ = MID$(identi$, 7, 10)
  42. END IF
  43.  
  44. DO
  45.         PRINT "Wie lang soll das Pattern gew„hlt werden (min."; minpat; " max."; maxpat; ")";
  46.         INPUT Patlen
  47. LOOP UNTIL (Patlen <= maxpat) AND (Patlen >= minpat)
  48. WHILE NOT EOF(1)
  49.         LINE INPUT #1, zeile
  50.         Result = ""
  51.         FOR i = 1 TO MaxAus
  52.             ResultF(i) = 0
  53.             ResultB(i) = 0
  54.         NEXT i
  55.         CALL MakeSITS(zeile, Patlen)
  56.         CALL MakeANSI(veil)
  57.  REM       PRINT Result
  58.         
  59. WEND
  60. CLOSE
  61. CLS
  62. SHELL "type " + ausdatei$
  63. DO: LOOP UNTIL INKEY$ <> ""
  64. END
  65.  
  66. SUB delpat (pattern$, PatPosition%, Aktuell%, change%)
  67.  
  68.    FOR i = 1 TO change%
  69.         IF PatPosition% = Aktuell% THEN
  70.                 pattern$ = LEFT$(pattern$, Aktuell% - 1)
  71.                 Aktuell% = Aktuell% - 1
  72.                 PatPosition% = PosOK%(PatPosition%, Aktuell%)
  73.         ELSE
  74.                 pattern$ = LEFT$(pattern$, PatPosition% - 1) + RIGHT$(pattern$, Aktuell% - PattPosition%)
  75.                 Aktuell% = Aktuell% - 1
  76.         END IF
  77.    NEXT i
  78. END SUB
  79.  
  80. FUNCTION InsPat$ (Zahl%)
  81.         Zw$ = ""
  82.         FOR i = 1 TO Zahl%
  83.             Zw$ = Zw$ + CHR$(Start + INT(Ende * RND))
  84.         NEXT i
  85.         InsPat$ = Zw$
  86. END FUNCTION
  87.  
  88. SUB MakeANSI (offen%)
  89.  
  90.     FOR i = 1 TO LEN(Result)
  91.         p$ = CHR$(27) + "[0;"
  92.         IF ResultF(i) > 7 THEN
  93.             p$ = p$ + "1;"
  94.             ResultF(i) = ResultF(i) - 8
  95.         END IF
  96.         p$ = p$ + "3" + CHR$(48 + ResultF(i)) + ";4" + CHR$(48 + ResultB(i)) + "m" + MID$(Result, i, 1)
  97.         PRINT #offen%, p$;
  98.     NEXT
  99.     PRINT #offen%, CHR$(13);
  100.  
  101.  
  102.  
  103.  
  104. END SUB
  105.  
  106. SUB MakePat (Zw$, ZwF%, ZwB%)
  107.  
  108.     Zw$ = MID$(Zeichen, INT(Zeichenk * RND) + 1, 1)
  109.     ZwB% = INT(RND * BColor)
  110.         DO
  111.             ZwF% = INT(RND * FColor)
  112.         LOOP UNTIL ZwF% <> ZwB%
  113.  
  114. END SUB
  115.  
  116. SUB MakeSITS (eingabe$, laenge%)
  117. DIM Vore%(20), Back(20) AS INTEGER
  118. DIM RanDot(20) AS STRING * 1
  119. DIM PatPos AS INTEGER
  120.  
  121.     'Pattern generieren
  122.     FOR ii = 1 TO laenge%
  123.         CALL MakePat(RanDot(ii), Vore%(ii), Back(ii))
  124.     NEXT ii
  125.     Aktuell% = laenge%
  126.  
  127.         level% = 0
  128.         FOR i = 1 TO Aktuell% 'Leerpattern schreiben
  129.             MID$(Result, i) = RanDot(i)
  130.             ResultF(i) = Vore%(i)
  131.             ResultB(i) = Back(i)
  132.         NEXT i
  133.  
  134.         PatPos = 1 'Erste Patternposition festlegen
  135.         FOR i = 1 TO LEN(eingabe$) 'Eingabe abarbeiten
  136.             a$ = MID$(eingabe$, i, 1)
  137.             IF a$ = " " THEN neuLevel% = 0 ELSE neuLevel% = VAL(a$)
  138.             IF neuLevel% <> level% THEN
  139.                IF level% > neuLevel% THEN
  140.                         change% = level% - neuLevel%
  141.                         FOR j = Aktuell% TO PatPos STEP -1
  142.                             RanDot(j + change%) = RanDot(j)
  143.                             Vore%(j + change%) = Vore%(j)
  144.                             Back(j + change%) = Back(j)
  145.                         NEXT
  146.                         FOR j = 0 TO change% - 1
  147.                             RanDot(j + PatPos) = MID$(Zeichen, INT(Zeichenk * RND) + 1, 1)
  148.                             Back(j + PatPos) = INT(RND * BColor)
  149.                             DO
  150.                                 Vore%(j + PatPos) = INT(RND * FColor)
  151.                             LOOP UNTIL Back(j + PatPos) <> Vore%(j + PatPos)
  152.                         NEXT
  153.                         Aktuell% = Aktuell% + change%
  154.                ELSE 'neulevel kleiner level
  155.                         change% = neuLevel% - level%
  156.                         FOR k = 1 TO change%
  157.                             FOR j = PatPos TO Aktuell% - 1
  158.                                 RanDot(j) = RanDot(j + 1)
  159.                                 Vore%(j) = Vore%(j + 1)
  160.                                 Back(j) = Back(j + 1)
  161.                             NEXT
  162.                             Aktuell% = Aktuell% - 1
  163.                             PatPos = PosOK%(PatPos, Aktuell%)
  164.                          NEXT k
  165.                END IF
  166.                level% = neuLevel%
  167.             END IF
  168.             MID$(Result, i + laenge%) = RanDot(PatPos)
  169.             ResultF(i + laenge%) = Vore%(PatPos)
  170.             ResultB(i + laenge%) = Back(PatPos)
  171.             PatPos = PatPos + 1
  172.             PatPos = PosOK%(PatPos, Aktuell%)
  173.         NEXT i
  174.  
  175. END SUB
  176.  
  177. FUNCTION PosOK% (Up%, Max%)
  178.        
  179.         IF Up% > Max% THEN
  180.                 PosOK% = 1
  181.         ELSE
  182.                 PosOK% = Up%
  183.         END IF
  184.  
  185. END FUNCTION
  186.  
  187.